package com.tb._03_xhr;

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

import java.nio.charset.StandardCharsets;


public class Producer {

    public static void main(String[] args) throws Exception{
        // 1.根据生产者组名创建一个消息的生产者对象
        DefaultMQProducer producer = new DefaultMQProducer("xhr_group");
        // 2.连接MQ，设置NameServer的地址
        producer.setNamesrvAddr("localhost:9876");
        // 3.启动Producer实例
        producer.start();
        // 4.创建消息，并指定Topic，Tag和消息体  1.topic：主题的意思，消息的一级分类  2.tag：消息的二级分类  3.我们的数据、消息，必须是byte字节数组
        Message msg = new Message("xhr_topic" /* Topic */,
                "xhr_tag" /* Tag */,
                "我是生产者同步消息！".getBytes(StandardCharsets.UTF_8)
        );
        // 5.发送消息到一个Broker，同步消息是会有响应的，我们可以知道消息是否发送成功
        producer.send(msg, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                // 发送成功
                System.out.println("发送成功：" + sendResult);
            }

            @Override
            public void onException(Throwable throwable) {
                // 发送失败
                throwable.printStackTrace();
                System.out.println("发送失败了");
            }
        }); // 我们调用了方法立马就要知道消息是否发送成功，这个叫同步
        System.out.println("执行回调方法之前就打印了这句话！！！");
    }

}
